package com.hilin.test.fs;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

@Builder
@AllArgsConstructor
@NoArgsConstructor
@Data
public class CCEvent {

    /**
     * 呼入
     */
    public static final String CALL_TYPE_CALLIN = "call_type_callin";

    /**
     * 呼出
     */
    public static final String CALL_TYPE_CALLOUT = "call_type_callout";

//    /**
//     * 内呼
//     * 席位打席位
//     */
//    public static final String CALL_TYPE_INNER = "call_type_inner";

    /**
     * 事件类型：拨打(呼叫事件发生前)，也就是freeswitch还没分配agent的时候调用
     * 当没有坐席或者坐席都繁忙时，同样会调用该事件
     */
    public static final String EVENT_TYPE_CALL = "event_type_call";

    /**
     * 事件类型：呼入(已分配agent)
     */
    public static final String EVENT_TYPE_CALLIN = "event_type_call_in";
    /**
     * 事件类型：呼出
     */
    public static final String EVENT_TYPE_CALLOUT = "event_type_call_out";
    /**
     * 事件类型：接听
     */
    public static final String EVENT_TYPE_ANSWER = "event_type_answer";
    /**
     * 事件类型：挂断
     */
    public static final String EVENT_TYPE_HANGUP = "event_type_hangup";
    /**
     * 事件类型：坐席切换
     * 说明：话机超过指定时间没接听时，会切换到下一坐席，触发点就是切换到下一坐席的时候
     */
    public static final String EVENT_TYPE_SWITCH_AGENT = "event_type_switch_agent";

    /**
     * 话单回调
     */
    public static final String EVENT_TYPE_CALL_FORM = "event_type_call_form";

    /**
     * 事件id
     * 全局唯一，业务层根据这个来判断是否已处理过该事件
     */
    private String id;

    /**
     * 通话id
     * 同一次通话的所有事件相同
     */
    private String callId;

    /**
     * 事件类型
     */
    private String eventType;

    /**
     * 拨打类型
     */
    private String callType;

    /**
     * 拨打号码
     * 如果是呼入，就是主叫号码
     * 如果是呼出，就是被叫号码
     * <p>
     * 注意：这个字段可能为空；当没有坐席或者坐席都忙的时候，该字段为空
     */
    private String number;

    /**
     * agent号码
     * 如果是席位切换，那么该参数就是切换后的席位号码，之前的席位号码是oldAgent
     * 这个字段在呼入的拨打（event_type_call）事件中为空
     */
    private String agent;

    /**
     * 切换前的席位号码
     * 仅出现在EVENT_TYPE_SWITCH_AGENT事件中
     */
    private String oldAgent;

    /**
     * 中继号码
     * 可根据中继号码来区分不同的系统
     * 注意： 呼出没有中继号码
     */
    private String relayNumber;

    /**
     * 事件发生时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date eventTime = new Date();


}
